package utils

import (
	"fmt"
	"math/rand"
	"strings"
	"time"
)

func getTimeTick64() int64 {
	return time.Now().UnixNano() / 1e6
}

func getTimeTick32() int32 {
	return int32(time.Now().Unix())
}

func getFormatTime(time time.Time) string {
	return time.Format("20060102")
}

// GenerateCode32 基础做法 日期20191025时间戳1571987125435+3位随机数
func GenerateCode32() string {
	date := getFormatTime(time.Now())
	r := rand.Intn(1000)
	code := fmt.Sprintf("%s%d%03d", date, getTimeTick32(), r)
	return code
}

// GenerateCode64 基础做法 日期20191025时间戳1571987125435+3位随机数
func GenerateCode64() string {
	date := getFormatTime(time.Now())
	r := rand.Intn(1000)
	code := fmt.Sprintf("%s%d%03d", date, getTimeTick64(), r)
	return code
}

// 生成指定位数的随机数
func GenerateRandomNumber(digits int) string {
	rand.Seed(time.Now().UnixNano()) // 设置随机数种子

	min := int64(pow10(digits - 1))
	max := int64(pow10(digits) - 1)
	randomInt := rand.Int63n(max-min+1) + min

	randomNumber := fmt.Sprintf("%0*d", digits, randomInt)
	randomNumber = strings.TrimLeft(randomNumber, "0") // 去除前导零

	return randomNumber
}

// 计算10的n次方
func pow10(n int) int {
	result := 1
	for i := 0; i < n; i++ {
		result *= 10
	}
	return result
}
